/**
 * 在 Vuex 中封装
 * Vuex 的 mutations， 从结果上看， mutations 类似于事件， 用于提交 Vuex 中的状态 state
 * action 和 mutations 也很类似， 主要的区别在于， action 可以包含异步操作， 而且可以通过 action 来提交 mutations
 *
 * 另外还有一个重要的区别
 * mutations 有一个固有参数 state， 接收的是 Vuex 中的 state 对象
 * action 也有一个固有参数 context， 但是 context 是 state 的父级， 包含 state、 getters
 *
*/

import Vue from 'vue'
import Vuex from 'vuex'
import * as types from './types'

Vue.use(Vuex)

const vuex_store = new Vuex.Store({
  state: {
    user: {},
    token: null,
    x_user_uid: null,
    x_user_token: null,
    cleaning_order : {
      lists: [],
      total : 0,
      curPage: 1,
      isEnd: false
    }
  },
  mutations: {
    [types.LOGIN]: (state, data) => {
      if (data == null){
        state.x_user_uid   = localStorage.authenticate_uid
        state.x_user_token = localStorage.authenticate_token
      }else{
        localStorage.authenticate_token = data.token
        localStorage.authenticate_uid   = data.uid

        state.x_user_uid   = data.uid
        state.x_user_token = data.token
      }

    },
    [types.LOGOUT]: (state) => {
      localStorage.removeItem('authenticate_token')
      state.x_user_uid   = null
      state.x_user_token = null
    },
    [types.CLEARING_ORDER_LISTS]: (state, data) => {
      state.cleaning_order.lists    = state.cleaning_order.lists.concat(data.list)
      state.cleaning_order.total    = state.cleaning_order.lists.length
      state.cleaning_order.curPage += 1
      if(parseInt(state.cleaning_order.total) == parseInt(data.total)){
        state.cleaning_order.isEnd = true
      }
    }

  }
})

export default vuex_store
